﻿#include"SList.h"
#include"contact.h"


//初始化通讯录
void InitContact(SLnode** con)
{
	FILE* pf = fopen("contact.txt", "wb+");
	if (pf == NULL)
	{
		perror("fopen error!");
		exit(1);
	}

	SLdatetype info;//创建一个新的通讯录，然后读取记事本存储的历史通讯录信息

	while (fread(&info, sizeof(info), 1, pf))//每次只读取一个的信息，直到不能读取
	{
		SLPushBack(con, info);
	}
	printf("历史数据导入成功！\n");
}

//添加通讯录数据
void AddContact(SLnode** con)
{
	SLdatetype info;
	printf("请输入姓名:>\n");
	scanf("%s", info.name);
	printf("请输入性别:>\n");
	scanf("%s", info.sex);
	printf("请输入年龄:>\n");
	scanf("%d", &info.age);
	printf("请输入电话:>\n");
	scanf("%s", info.tel);
	printf("请输入地址:>\n");
	scanf("%s", info.addr);

	SLPushBack(con, info);
	printf("插入成功!\n");

}

SLnode* FindbyName(SLnode* con, char name[])
{
	SLnode* cur = con;
	while (cur)
	{
		if (strcmp(cur->x.name, name) == 0)
		{
			return cur;
		}
	}
	return NULL;//没有找到，返回空指针
}

//删除通讯录数据
void DelContact(SLnode** con)
{
	char name[NAME_MAX];
	printf("请输入要删除的联系人姓名:>\n");
	scanf("%s", name);

	SLnode* pos = FindbyName(*con, name);
	if (pos == NULL)
	{
		printf("要删除的联系人不存在！\n");
		return;
	}

	SLErase(con, pos);
	printf("删除成功！\n");
}

//展示通讯录数据
void ShowContact(SLnode* con)
{
	assert(con);
	SLnode* cur = con;
	while (cur)
	{
		printf("姓名:> %s\n", cur->x.name);
		printf("性别:> %s\n", cur->x.sex);
		printf("年龄:> %d\n", cur->x.age);
		printf("电话:> %s\n", cur->x.tel);
		printf("地址:> %s\n", cur->x.addr);
		printf("\n");
		cur = cur->next;
	}
}


//查找通讯录数据
void FindContact(SLnode* con)
{
	char name[NAME_MAX];
	printf("请输入要查找的用户名:>\n");
	scanf("%s", name);
	SLnode* cur = FindbyName(con, name);
	if (cur == NULL)
	{
		printf("要查找的用户名不存在!\n");
		return;
	}

	printf("姓名:> %s\n", cur->x.name);
	printf("性别:> %s\n", cur->x.sex);
	printf("年龄:> %d\n", cur->x.age);
	printf("电话:> %s\n", cur->x.tel);
	printf("地址:> %s\n", cur->x.addr);
	printf("\n");
}

//修改通讯录数据
void ModifyContact(SLnode** con)
{
	char name[NAME_MAX];
	printf("请输入要修改的用户名:>\n");
	scanf("%s", name);
	SLnode* cur = FindbyName(*con, name);
	if (cur == NULL)
	{
		printf("要修改的用户名不存在!\n");
	}

	printf("请输入姓名:>\n");
	scanf("%s", cur->x.name);
	printf("请输入性别:>\n");
	scanf("%s", cur->x.sex);
	printf("请输入年龄:>\n");
	scanf("%d", &cur->x.age);
	printf("请输入电话:>\n");
	scanf("%s", cur->x.tel);
	printf("请输入地址:>\n");
	scanf("%s", cur->x.addr);
	printf("修改成功!\n");
}


void savelist(SLnode* con)
{
	FILE* pf = fopen("contact.txt", "wb");
	if (pf == NULL) {
		perror("fopen error!\n");
		return;
	}
	//将通讯录数据写⼊⽂件
	SLnode* cur = con;
	while (cur)
	{
		fwrite(&(cur->x), sizeof(cur->x), 1, pf);
		cur = cur->next;
	}

	printf("通讯录数据保存成功！\n");
}

//销毁通讯录数据
void DestroyContact(SLnode** con)
{
	savelist(*con);
	SListDesTroy(con);
}